package OpenCodes.UI;

import java.io.Console;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import OpenCodes.Dominio.Persona;
import OpenCodes.Servicios.Persona.IAltaPersonaServicio;
import OpenCodes.Servicios.Persona.IListadoPersonaServicio;
import OpenCodes.Servicios.Persona.PersonaServicio;

/**
 * 
 * @author emmie
 *
 */
public class ConsolaUI implements IUsuarioInterfazPersona {

	private final IAltaPersonaServicio altaService;
	//private final IListadoPersonaServicio listadoService;
	private final Console console;
	private final DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
	private int id;
	private String nombre;
	private String apellido;
	private Date fechaNacimiento;
	private String calle;
	private String ciudad;
	private int codigoPostal;
	private List<Persona> listaPersonas;
	
	public ConsolaUI(Console console) {
		this.console = console;
		altaService = new PersonaServicio();
		altaService.init(this);
		//listadoService = (IListadoPersonaServicio) altaService;
	}
	
	@Override
	public String getApellido() {
		return apellido;
	}

	@Override
	public String getCalle() {
		return calle;
	}

	

	@Override
	public int getId() {
		return id;
	}

	@Override
	public String getNombre() {
		return nombre;
	}

	@Override
	public void setListaPersonas(List<Persona> lista) {
		this.listaPersonas = lista;
	}
	
	private void iniciarApp() throws Exception {
		boolean seguir = true;
		do {

			console.printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
			console.printf("                    TPF2010 - DEMO                       \n");
			console.printf("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n");
			console.printf("  1. Ingresar una persona\n");
			console.printf("  2. Listar personas\n");
			console.printf("  3. Salir\n");

			String line = console.readLine();
			line = line.equals("") ? "0" : line;
			int opcion = Integer.valueOf(line);
			switch (opcion) {
			case 1:
				ingresar(console);
				break;
			case 2:
				//listar(console);
				break;
			case 3:
				seguir = false;
				break;
			default:
				seguir = true;
			}
		} while (seguir);
		
	}
	/**
	 * Inicia la ejecución de la aplicación de consola
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		ConsolaUI app = new ConsolaUI(System.console());
		app.iniciarApp();
	}

	private void ingresar(Console console) throws Exception {
		console.printf("---------------------\n");
		this.id = Integer.valueOf(console.readLine("Id: "));
		this.nombre = console.readLine("Nombre: ");
		this.apellido = console.readLine("Apellido: ");
		this.fechaNacimiento = this.dateFormat.parse(console.readLine("Fecha Nac (dd/mm/aaaa): "));
		this.calle = console.readLine("calle: ");
		this.ciudad = console.readLine("ciudad: ");
		String cp = console.readLine("CP: ");
		this.codigoPostal = Integer.valueOf(cp.equals("") ? "0": cp);
		String aceptar = console.readLine("¿Desea ingrear la persona? (s/n)");
		if (aceptar.toUpperCase().equals("S")) {
			altaService.agregar(this);
			console.printf("--- Carga Exitosa!! ---\n\n");
		}	
	}
/*
	private void listar(Console console) throws Exception {
		console.printf("--------------------\n");
		listadoService.listar(this);
		for (Persona p : listaPersonas) {
			console.printf(p.toString() + "\n");
		}
	}
*/
    @Override
    public String getTelefono() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public int getNumero() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String getPiso() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String getDepartamento() {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
